package com.unju.ventanas.proyecto.actividad.recurso;

import java.util.ArrayList;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

import com.unju.hibernate.entidades.Recurso;
import com.unju.hibernate.patronDAO.imp.RecursoDAOImp;
import com.unju.utils.ConstantesGlobales;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class JDBuscarRecurso extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JTable table;
	private JTextField textField;
	private ArrayList<Recurso> listaRecurso;
	private ButtonGroup opcionesBusqueda;
	private JRadioButton rdbtnRecursoId;
	private JRadioButton rdbtnRecurso;
	private JButton btnAgregar;
	private JButton btnTerminado;
	private DefaultTableModel modelo;
	private int regSeleccionado;
	private Recurso recurso = null;
	private Object idCapturado;
	private boolean seleccionado;
	

	/**
	 * Create the dialog.
	 */
	public JDBuscarRecurso() {
		crearVentana();
		crearComponente();
		crearBotones();
		
		cargarTabla();
		setSeleccionado(false);
		setVisible(true);
	}
	protected void crearVentana(){
		super.setTitle(ConstantesGlobales.BUSCAR_RESPONSABLE);
		setSize(540, 380);
		setBounds(100, 100, 462, 341);
		getContentPane().setLayout(null);
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		setLocationRelativeTo(null);
		setModal(true);	
	}
	protected void crearComponente(){
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBounds(0, 0, 446, 258);
		getContentPane().add(panel);
		
		JLabel lblBuscarPor = new JLabel("Buscar por:");
		lblBuscarPor.setBounds(12, 49, 78, 14);
		panel.add(lblBuscarPor);
		
		rdbtnRecursoId = new JRadioButton("Id de Recurso");
		rdbtnRecursoId.setBounds(175, 44, 100, 23);
		panel.add(rdbtnRecursoId);

		rdbtnRecurso = new JRadioButton("Recurso");
		rdbtnRecurso.setBounds(89, 44, 72, 23);
		rdbtnRecurso.setSelected(true);
		panel.add(rdbtnRecurso);

		opcionesBusqueda = new ButtonGroup();
		opcionesBusqueda.add(rdbtnRecurso);
		opcionesBusqueda.add(rdbtnRecursoId);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 74, 426, 173);
		panel.add(scrollPane);
		table = new JTable();
		table.setSurrendersFocusOnKeystroke(true);
		table.setModel(new DefaultTableModel(new Object[][] {}, new String[] {
				"Id", "Recurso", "Descripcion", "Tipo" }));
		table.getColumnModel().getColumn(1).setResizable(false);
		table.getColumnModel().getColumn(2).setResizable(false);
		table.addMouseListener(new MouseAdapter() {
			
			public void mouseClicked(MouseEvent e) {
				int fila = table.rowAtPoint(e.getPoint());
				int columna = table.columnAtPoint(e.getPoint());
				if ((fila > -1) && (columna > -1)) {
					// logger.info(""+modelo.getValueAt(fila,columna));
					idCapturado = table.getValueAt(fila,0);
					//idCapturado = modelo.getValueAt(fila, 0);
					int id = Integer.parseInt(idCapturado.toString());
					recurso = new RecursoDAOImp().get(id);
					//logger.info("idCapturado: " + idCapturado);
				}
			}
		});
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scrollPane.setViewportView(table);
		
		
		textField = new JTextField();
		textField.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent arg0) {
				String cadena = "";
				cadena = textField.getText();
				cargarTabla(cadena);
			}
			@Override
			public void keyReleased(KeyEvent e) {
				String cadena = "";
				cadena = textField.getText();
				cargarTabla(cadena);
			}
			@Override
			public void keyTyped(KeyEvent e) {
				if (rdbtnRecursoId.isSelected()) {
					ConstantesGlobales.validarNumero(e);
				}
			}
		});
		textField.setColumns(20);
		textField.setBounds(68, 11, 306, 20);
		panel.add(textField);
	}
	protected void crearBotones(){
		btnAgregar = new JButton(ConstantesGlobales.BTN_AGREGAR);		
		btnAgregar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (recurso!=null) {
					textField.setText("");
					setSeleccionado(true);
					dispose();
				}else{
					//logger.info("responsable no ha sido cargado");
				}
			}
		});
		btnAgregar.setBounds(240, 269, 95, 23);
		getContentPane().add(btnAgregar);

		btnTerminado = new JButton(ConstantesGlobales.BTN_CANCELAR);		
		btnTerminado.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {	
				setSeleccionado(false);
				dispose();
			}
		});
		btnTerminado.setBounds(345, 269, 89, 23);
		getContentPane().add(btnTerminado);
	}
	
	//========================================================================================================0
	
	private void recorrerTabla(Object[] fila, DefaultTableModel modelo) {
		for (int i = 0; i < listaRecurso.size(); i++) {
			fila[0] = listaRecurso.get(i).getIdRecurso();
			fila[1] = listaRecurso.get(i).getNombre();
			fila[2] = listaRecurso.get(i).getTiporecurso().getNombre();			
			modelo.addRow(fila);
		}
	}
	
	public void cargarTabla() {
		listaRecurso = (ArrayList<Recurso>) new RecursoDAOImp()
				.getAll();
		DefaultTableModel modelo = (DefaultTableModel) table.getModel();
		Object[] fila = new Object[modelo.getColumnCount()];
		recorrerTabla(fila, modelo);
	}
	protected void cargarTabla(String cadena) {
		try {
			if (rdbtnRecurso.isSelected()) {
				listaRecurso=new RecursoDAOImp()
						.findByName(cadena);			
			}		
			if (rdbtnRecursoId.isSelected() && !textField.getText().equals("")) {
				listaRecurso = new RecursoDAOImp().findByID(Integer
						.parseInt(cadena));			
			}		
			modelo = (DefaultTableModel) table.getModel();
			modelo.setRowCount(0);// <-- with this line, the table is cleaned
			Object[] fila = new Object[modelo.getColumnCount()];
			recorrerTabla(fila, modelo);
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	public Recurso getRecurso() {
		return recurso;
	}
	public void setRecurso(Recurso recurso) {
		this.recurso = recurso;
	}
	public int getRegSeleccionado() {
		return regSeleccionado;
	}
	public void setRegSeleccionado(int regSeleccionado) {
		this.regSeleccionado = regSeleccionado;
	}
	public boolean isSeleccionado() {
		return seleccionado;
	}
	public void setSeleccionado(boolean seleccionado) {
		this.seleccionado = seleccionado;
	}

}
